#!/bin/bash

# 配置区域 - 请根据实际情况修改以下参数
REPO_PATH=$1  # Git仓库本地路径
CHECK_INTERVAL=$2                        # 检查间隔时间(秒)，300秒=5分钟
BRANCH="main"                             # 要检查的分支

# 检查仓库目录是否存在
if [ ! -d "$REPO_PATH/.git" ]; then
    echo "错误: $REPO_PATH 不是一个有效的Git仓库目录"
    exit 1
fi

echo "开始监控Git仓库: $REPO_PATH"
echo "监控分支: $BRANCH"
echo "检查间隔: $CHECK_INTERVAL 秒"
echo "按Ctrl+C停止监控"

while true; do
    echo "----------------------------------------"
    echo "检查时间: $(date)"
    
    # 进入仓库目录
    cd "$REPO_PATH" || {
        echo "无法进入仓库目录: $REPO_PATH"
        sleep $CHECK_INTERVAL
        continue
    }
    
    # 获取当前分支
    current_branch=$(git rev-parse --abbrev-ref HEAD)
    
    # 如果当前分支不是目标分支，则切换
    if [ "$current_branch" != "$BRANCH" ]; then
        echo "切换到 $BRANCH 分支..."
        if ! git checkout "$BRANCH"; then
            echo "切换分支失败，将在 $CHECK_INTERVAL 秒后重试"
            sleep $CHECK_INTERVAL
            continue
        fi
    fi
    
    # 获取本地和远程的最新提交哈希
    local_hash=$(git rev-parse HEAD)
    remote_hash=$(git ls-remote origin "$BRANCH" | awk '{print $1}')
    
    # 检查是否获取到了远程哈希
    if [ -z "$remote_hash" ]; then
        echo "无法获取远程仓库信息，将在 $CHECK_INTERVAL 秒后重试"
        sleep $CHECK_INTERVAL
        continue
    fi
    
    # 比较本地和远程的提交哈希
    if [ "$local_hash" = "$remote_hash" ]; then
        echo "仓库已是最新版本，无需更新"
    else
        echo "发现更新！正在拉取最新内容..."
        if git pull origin "$BRANCH"; then
            echo "拉取更新成功"
            # 这里可以添加更新后的自定义操作，如重启服务等
            # 例如: systemctl restart your_service
        else
            echo "拉取更新失败"
        fi
    fi
    
    echo "等待 $CHECK_INTERVAL 秒后进行下一次检查..."
    sleep $CHECK_INTERVAL
done

